// 1. 导入必要的模块
import { contextBridge, ipcRenderer } from 'electron';
import { UserData } from '../src/types/commonType';

// 2. 通过 contextBridge 安全地向渲染进程暴露 API
contextBridge.exposeInMainWorld('api', {
	// 示例1: 暴露应用版本信息（不需要IPC通信）
	versions: {
		node: () => process.versions.node,
		chrome: () => process.versions.chrome,
		electron: () => process.versions.electron,
	},
	getAllUserData: () => ipcRenderer.invoke('getAllUserData'),
	saveToken: (userData: UserData) => ipcRenderer.invoke('saveToken', userData),
	// 最小化
	minimizeWindow: () => ipcRenderer.invoke('minimizeWindow'),
	// 最大化
	maximizeWindow: () => ipcRenderer.invoke('maximizeWindow'),
	// 关闭窗口
	closeWindow: () => ipcRenderer.invoke('closeWindow'),
	// 设置窗口可最大化，并且可调节大小
	setWindowSize: () => ipcRenderer.invoke('setWindowSize'),
	// 获取存储的token
	getStoreData: () => ipcRenderer.invoke('getStoreData'),
	// 清除token
	clearToken: () => ipcRenderer.invoke('clearToken'),
});

// 暴露 electron 对象用于监听主进程消息
contextBridge.exposeInMainWorld('electron', {
	ipcRenderer: {
		on: (channel: string, callback: Function) => {
			ipcRenderer.on(channel, (event, ...args) => callback(...args));
		},
		removeAllListeners: (channel: string) => {
			ipcRenderer.removeAllListeners(channel);
		},
		send: (channel: string, ...args: any[]) => {
			ipcRenderer.send(channel, ...args);
		}
	}
});
